# -*- coding：utf-8 -*-
"""
@Time:2024-08-1818:10
@Auth:泛彼泊舟
@File:5、生成器定义和使用.py
@IDE:PyCharm
@模块功能：xxx
"""
"""
自定义函数和生成器唯一的区别就是函数中有yield关键字
"""

def func():
    print(1)
    print(2)
    print(3)
    return 5
    print(4)
    print(5)

# 函数一旦被调用会从头开始执行函数里面的代码块
# 函数里面一旦有return关键字，那么会结束当前函数的执行，并且携带返回值
print(func())

# 当函数中有yield关键字，那么就是生成器
def func1():
    print(1)
    print(2)
    print(3)
    yield 5
    # yield会结束本次生成器的执行，并且携带返回值
    # 当使用生成器对象通过next内置函数调用时，下次调用会从yield下面开始
    print(4)
    yield 6
    print(5)

# 生成器的调用方式跟普通函数不一样
print(func1())  # <generator object func1 at 0x00000235D33C04A0>
# 使用next()内置函数进行调用
# print(next(func1()))
# print(next(func1()))

# 一般会将生成器引用进行复制，然后再使用next（）内置函数调用
fn = func1()  # fn 生成器对象
print("第一次调用生成器")
print(next(fn))
print("第二次调用生成器")
print(next(fn))
print("三次调用生成器")
print(next(fn))
